package mfh.liveroam.client;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.ui.RootPanel;
import com.gwtext.client.core.EventObject;
import com.gwtext.client.data.*;
import com.gwtext.client.util.Format;
import com.gwtext.client.widgets.Panel;
import com.gwtext.client.widgets.grid.ColumnConfig;
import com.gwtext.client.widgets.grid.ColumnModel;
import com.gwtext.client.widgets.grid.GridPanel;
import com.gwtext.client.widgets.grid.event.*;

public class CopyOfPicasaTableEP implements EntryPoint {

	public void onModuleLoad() {
		Panel panel = new Panel();
		panel.setBorder(false);
		panel.setPaddings(15);
		RecordDef recordDef = new RecordDef(new FieldDef[] {
				new StringFieldDef("company"), new FloatFieldDef("price"),
				new FloatFieldDef("change"), new FloatFieldDef("pctChange"),
				new DateFieldDef("lastChanged", "n/j h:ia"),
				new StringFieldDef("symbol"), new StringFieldDef("industry") });

		Object[][] data = getCompanyData();
		MemoryProxy proxy = new MemoryProxy(data);

		ArrayReader reader = new ArrayReader(recordDef);
		Store store = new Store(proxy, reader);
		store.load();

		GridPanel grid = new GridPanel();
		grid.setStore(store);

		ColumnConfig[] columns = new ColumnConfig[] {
				// column ID is company which is later used in
				// setAutoExpandColumn
				new ColumnConfig("Company", "company", 160, true, null,
						"company"), new ColumnConfig("Price", "price", 35),
				new ColumnConfig("Change", "change", 45),
				new ColumnConfig("% Change", "pctChange", 65),
				new ColumnConfig("Last Updated", "lastChanged", 65),
				new ColumnConfig("Industry", "industry", 60, true) };

		ColumnModel columnModel = new ColumnModel(columns);
		grid.setColumnModel(columnModel);

		grid.setFrame(true);
		grid.setStripeRows(true);
		grid.setAutoExpandColumn("company");
		grid.setTitle("Grid Events");
		grid.setHeight(350);
		grid.setWidth(600);

		grid.addGridCellListener(new GridCellListener() {
			public void onCellClick(GridPanel grid, int rowIndex, int colindex,
					EventObject e) {
				System.out.println("GridCellListener.onCellClick::row("
						+ rowIndex + "), col(" + colindex + ");");
			}

			public void onCellContextMenu(GridPanel grid, int rowIndex,
					int colIndex, EventObject e) {
				System.out.println("GridCellListener.onCellContextMenu::row("
						+ rowIndex + "), col(" + colIndex + ");");
			}

			public void onCellDblClick(GridPanel grid, int rowIndex,
					int colIndex, EventObject e) {
				System.out.println("GridCellListener.onCellDblClick::row("
						+ rowIndex + "), col(" + colIndex + ");");
			}
		});

		grid.addGridColumnListener(new GridColumnListener() {
			public void onColumnMove(GridPanel grid, int oldIndex, int newIndex) {
				System.out
						.println(Format
								.format(
										"GridCellListener.onColumnMove::oldIndex({0}),newIndex({1})",
										oldIndex, newIndex));
			}

			public void onColumnResize(GridPanel grid, int colIndex, int newSize) {
				System.out
						.println(Format
								.format(
										"GridCellListener.onColumnResize::oldIndex({0}), newSize({1})",
										colIndex, newSize));
			}
		});

		grid.addGridHeaderListener(new GridHeaderListener() {
			public void onHeaderClick(GridPanel grid, int colIndex,
					EventObject e) {
				System.out.println(Format.format(
						"GridHeaderListener.onHeaderClick::colIndex({0}))",
						colIndex));
			}

			public void onHeaderContextMenu(GridPanel grid, int colIndex,
					EventObject e) {
				System.out
						.println(Format
								.format(
										"GridHeaderListener.onHeaderContextMenu::colIndex({0}))",
										colIndex));
			}

			public void onHeaderDblClick(GridPanel grid, int colIndex,
					EventObject e) {
				System.out.println(Format.format(
						"GridHeaderListener.onHeaderDblClick::colIndex({0}))",
						colIndex));
			}
		});

		grid.addGridListener(new GridListener() {
			public void onBodyScroll(int scrollLeft, int scrollTop) {
				System.out
						.println(Format
								.format(
										"GridListener.onBodyScroll::scrollLeft({0},scrollTop({1})))",
										scrollLeft, scrollTop));
			}

			public void onClick(EventObject e) {
				System.out.println("GridListener.onClick");
			}

			public void onContextMenu(EventObject e) {
				System.out.println("GridListener.onContextMenu");
			}

			public void onDblClick(EventObject e) {
				System.out.println("GridListener.onDblClick");
			}

			public void onKeyDown(EventObject e) {
				System.out.println("GridListener.onKeyDown");
			}

			public void onKeyPress(EventObject e) {
				System.out.println("GridListener.onKeyPress");
			}
		});

		grid.addGridRowListener(new GridRowListener() {
			public void onRowClick(GridPanel grid, int rowIndex, EventObject e) {
				System.out.println(Format.format(
						"GridRowListener.onRowClick::rowIndex({0})", rowIndex));
			}

			public void onRowDblClick(GridPanel grid, int rowIndex,
					EventObject e) {
				System.out.println(Format.format(
						"GridRowListener.onRowDblClick::rowIndex({0})",
						rowIndex));
			}

			public void onRowContextMenu(GridPanel grid, int rowIndex,
					EventObject e) {
				System.out
						.println(Format
								.format(
										"GridRowListener.onRowContextMenu::rowIndex({0}),({1}), y({2})",
										rowIndex, e.getPageX(), e.getPageY()));
			}
		});

		panel.add(grid);

		RootPanel.get().add(panel);
	}

	private Object[][] getCompanyData() {
		return new Object[][] {
				new Object[] { "3m Co", new Double(71.72), new Double(0.02),
						new Double(0.03), "9/1 12:00am", "MMM", "Manufacturing" },
				new Object[] { "Alcoa Inc", new Double(29.01),
						new Double(0.42), new Double(1.47), "9/1 12:00am",
						"AA", "Manufacturing" },
				new Object[] { "Altria Group Inc", new Double(83.81),
						new Double(0.28), new Double(0.34), "9/1 12:00am",
						"MO", "Manufacturing" },
				new Object[] { "American Express Company", new Double(52.55),
						new Double(0.01), new Double(0.02), "9/1 12:00am",
						"AXP", "Finance" },
				new Object[] { "American International Group, Inc.",
						new Double(64.13), new Double(0.31), new Double(0.49),
						"9/1 12:00am", "AIG", "Services" },
				new Object[] { "AT&T Inc.", new Double(31.61),
						new Double(-0.48), new Double(-1.54), "9/1 12:00am",
						"T", "Services" },
				new Object[] { "Boeing Co.", new Double(75.43),
						new Double(0.53), new Double(0.71), "9/1 12:00am",
						"BA", "Manufacturing" },
				new Object[] { "Caterpillar Inc.", new Double(67.27),
						new Double(0.92), new Double(1.39), "9/1 12:00am",
						"CAT", "Services" },
				new Object[] { "Citigroup, Inc.", new Double(49.37),
						new Double(0.02), new Double(0.04), "9/1 12:00am", "C",
						"Finance" },
				new Object[] { "E.I. du Pont de Nemours and Company",
						new Double(40.48), new Double(0.51), new Double(1.28),
						"9/1 12:00am", "DD", "Manufacturing" } };
	}
}